## API Report File for "@backstage/plugin-catalog"

> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).

```ts
/// <reference types="react" />

import { ApiHolder } from '@backstage/core-plugin-api';
import { BackstagePlugin } from '@backstage/core-plugin-api';
import { CatalogApi } from '@backstage/plugin-catalog-react';
import { ComponentEntity } from '@backstage/catalog-model';
import { CompoundEntityRef } from '@backstage/catalog-model';
import { Entity } from '@backstage/catalog-model';
import { EntityListContextProps } from '@backstage/plugin-catalog-react';
import { EntityOwnerPickerProps } from '@backstage/plugin-catalog-react';
import { EntityPresentationApi } from '@backstage/plugin-catalog-react';
import { EntityRefPresentation } from '@backstage/plugin-catalog-react';
import { EntityRefPresentationSnapshot } from '@backstage/plugin-catalog-react';
import { ExternalRouteRef } from '@backstage/core-plugin-api';
import { HumanDuration } from '@backstage/types';
import { IconComponent } from '@backstage/core-plugin-api';
import { IndexableDocument } from '@backstage/plugin-search-common';
import { InfoCardVariants } from '@backstage/core-components';
import { JSX as JSX_2 } from 'react';
import { Observable } from '@backstage/types';
import { Overrides } from '@material-ui/core/styles/overrides';
import { default as React_2 } from 'react';
import { ReactNode } from 'react';
import { ResourceEntity } from '@backstage/catalog-model';
import { ResultHighlight } from '@backstage/plugin-search-common';
import { RouteRef } from '@backstage/core-plugin-api';
import { SearchResultListItemExtensionProps } from '@backstage/plugin-search-react';
import { StarredEntitiesApi } from '@backstage/plugin-catalog-react';
import { StorageApi } from '@backstage/core-plugin-api';
import { StyleRules } from '@material-ui/core/styles/withStyles';
import { TableColumn } from '@backstage/core-components';
import { TableOptions } from '@backstage/core-components';
import { TableProps } from '@backstage/core-components';
import { TabProps } from '@material-ui/core';
import { UserListFilterKind } from '@backstage/plugin-catalog-react';

// @public
export interface AboutCardProps {
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public (undocumented)
export function AboutContent(props: AboutContentProps): React_2.JSX.Element;

// @public
export interface AboutContentProps {
  // (undocumented)
  entity: Entity;
}

// @public (undocumented)
export function AboutField(props: AboutFieldProps): React_2.JSX.Element;

// @public
export interface AboutFieldProps {
  // (undocumented)
  children?: React_2.ReactNode;
  // (undocumented)
  gridSizes?: Record<string, number>;
  // (undocumented)
  label: string;
  // (undocumented)
  value?: string;
}

// @public (undocumented)
export type BackstageOverrides = Overrides & {
  [Name in keyof PluginCatalogComponentsNameToClassKey]?: Partial<
    StyleRules<PluginCatalogComponentsNameToClassKey[Name]>
  >;
};

// @public (undocumented)
export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl';

// @public (undocumented)
export const CatalogEntityPage: () => JSX.Element;

// @public (undocumented)
export const CatalogIndexPage: (props: DefaultCatalogPageProps) => JSX.Element;

// @public @deprecated (undocumented)
export function CatalogKindHeader(
  props: CatalogKindHeaderProps,
): React_2.JSX.Element;

// @public
export interface CatalogKindHeaderProps {
  allowedKinds?: string[];
  initialFilter?: string;
}

// @public (undocumented)
export const catalogPlugin: BackstagePlugin<
  {
    catalogIndex: RouteRef<undefined>;
    catalogEntity: RouteRef<{
      name: string;
      kind: string;
      namespace: string;
    }>;
  },
  {
    createComponent: ExternalRouteRef<undefined, true>;
    viewTechDoc: ExternalRouteRef<
      {
        name: string;
        kind: string;
        namespace: string;
      },
      true
    >;
    createFromTemplate: ExternalRouteRef<
      {
        namespace: string;
        templateName: string;
      },
      true
    >;
    unregisterRedirect: ExternalRouteRef<undefined, true>;
  }
>;

// @public (undocumented)
export const CatalogSearchResultListItem: (
  props: SearchResultListItemExtensionProps<CatalogSearchResultListItemProps>,
) => JSX.Element | null;

// @public
export interface CatalogSearchResultListItemProps {
  // (undocumented)
  highlight?: ResultHighlight;
  // (undocumented)
  icon?: ReactNode | ((result: IndexableDocument) => ReactNode);
  // (undocumented)
  lineClamp?: number;
  // (undocumented)
  rank?: number;
  // (undocumented)
  result?: IndexableDocument;
}

// @public (undocumented)
export const CatalogTable: {
  (props: CatalogTableProps): React_2.JSX.Element;
  columns: Readonly<{
    createNameColumn(
      options?:
        | {
            defaultKind?: string | undefined;
          }
        | undefined,
    ): TableColumn<CatalogTableRow>;
    createSystemColumn(): TableColumn<CatalogTableRow>;
    createOwnerColumn(): TableColumn<CatalogTableRow>;
    createSpecTargetsColumn(): TableColumn<CatalogTableRow>;
    createSpecTypeColumn(options?: {
      hidden: boolean;
    }): TableColumn<CatalogTableRow>;
    createSpecLifecycleColumn(): TableColumn<CatalogTableRow>;
    createMetadataDescriptionColumn(): TableColumn<CatalogTableRow>;
    createTagsColumn(): TableColumn<CatalogTableRow>;
    createTitleColumn(
      options?:
        | {
            hidden?: boolean | undefined;
          }
        | undefined,
    ): TableColumn<CatalogTableRow>;
    createLabelColumn(
      key: string,
      options?:
        | {
            title?: string | undefined;
            defaultValue?: string | undefined;
          }
        | undefined,
    ): TableColumn<CatalogTableRow>;
    createNamespaceColumn(): TableColumn<CatalogTableRow>;
  }>;
  defaultColumnsFunc: CatalogTableColumnsFunc;
};

// @public
export type CatalogTableColumnsFunc = (
  entityListContext: EntityListContextProps,
) => TableColumn<CatalogTableRow>[];

// @public
export interface CatalogTableProps {
  // (undocumented)
  actions?: TableProps<CatalogTableRow>['actions'];
  // (undocumented)
  columns?: TableColumn<CatalogTableRow>[] | CatalogTableColumnsFunc;
  // (undocumented)
  emptyContent?: ReactNode;
  // (undocumented)
  subtitle?: string;
  // (undocumented)
  tableOptions?: TableProps<CatalogTableRow>['options'];
}

// @public (undocumented)
export interface CatalogTableRow {
  // (undocumented)
  entity: Entity;
  // (undocumented)
  resolved: {
    name: string;
    entityRef: string;
    partOfSystemRelationTitle?: string;
    partOfSystemRelations: CompoundEntityRef[];
    ownedByRelationsTitle?: string;
    ownedByRelations: CompoundEntityRef[];
  };
}

// @public (undocumented)
export type ColumnBreakpoints = Record<Breakpoint, number>;

// @public
export interface DefaultCatalogPageProps {
  // (undocumented)
  actions?: TableProps<CatalogTableRow>['actions'];
  // (undocumented)
  columns?: TableColumn<CatalogTableRow>[] | CatalogTableColumnsFunc;
  // (undocumented)
  emptyContent?: ReactNode;
  // (undocumented)
  initialKind?: string;
  // (undocumented)
  initiallySelectedFilter?: UserListFilterKind;
  // (undocumented)
  ownerPickerMode?: EntityOwnerPickerProps['mode'];
  // (undocumented)
  pagination?:
    | boolean
    | {
        limit?: number;
      };
  // (undocumented)
  tableOptions?: TableProps<CatalogTableRow>['options'];
}

// @public
export class DefaultEntityPresentationApi implements EntityPresentationApi {
  static create(
    options: DefaultEntityPresentationApiOptions,
  ): EntityPresentationApi;
  static createLocal(): EntityPresentationApi;
  // (undocumented)
  forEntity(
    entityOrRef: Entity | string,
    context?: {
      defaultKind?: string;
      defaultNamespace?: string;
    },
  ): EntityRefPresentation;
}

// @public
export interface DefaultEntityPresentationApiOptions {
  batchDelay?: HumanDuration;
  cacheTtl?: HumanDuration;
  catalogApi?: CatalogApi;
  kindIcons?: Record<string, IconComponent>;
  renderer?: DefaultEntityPresentationApiRenderer;
}

// @public
export interface DefaultEntityPresentationApiRenderer {
  async?: boolean;
  render: (options: {
    entityRef: string;
    loading: boolean;
    entity: Entity | undefined;
    context: {
      defaultKind?: string;
      defaultNamespace?: string;
    };
  }) => {
    snapshot: Omit<EntityRefPresentationSnapshot, 'entityRef'>;
  };
}

// @public
export class DefaultStarredEntitiesApi implements StarredEntitiesApi {
  constructor(opts: { storageApi: StorageApi });
  // (undocumented)
  starredEntitie$(): Observable<Set<string>>;
  // (undocumented)
  toggleStarred(entityRef: string): Promise<void>;
}

// @public (undocumented)
export interface DependencyOfComponentsCardProps {
  // (undocumented)
  title?: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public (undocumented)
export interface DependsOnComponentsCardProps {
  // (undocumented)
  columns?: TableColumn<ComponentEntity>[];
  // (undocumented)
  tableOptions?: TableOptions;
  // (undocumented)
  title?: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public (undocumented)
export interface DependsOnResourcesCardProps {
  // (undocumented)
  columns?: TableColumn<ResourceEntity>[];
  // (undocumented)
  tableOptions?: TableOptions;
  // (undocumented)
  title?: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public (undocumented)
export const EntityAboutCard: (props: AboutCardProps) => JSX.Element;

// @public (undocumented)
export type EntityContextMenuClassKey = 'button';

// @public (undocumented)
export const EntityDependencyOfComponentsCard: (
  props: DependencyOfComponentsCardProps,
) => JSX.Element;

// @public (undocumented)
export const EntityDependsOnComponentsCard: (
  props: DependsOnComponentsCardProps,
) => JSX.Element;

// @public (undocumented)
export const EntityDependsOnResourcesCard: (
  props: DependsOnResourcesCardProps,
) => JSX.Element;

// @public (undocumented)
export const EntityHasComponentsCard: (
  props: HasComponentsCardProps,
) => JSX.Element;

// @public (undocumented)
export const EntityHasResourcesCard: (
  props: HasResourcesCardProps,
) => JSX.Element;

// @public (undocumented)
export const EntityHasSubcomponentsCard: (
  props: HasSubcomponentsCardProps,
) => JSX.Element;

// @public (undocumented)
export const EntityHasSystemsCard: (props: HasSystemsCardProps) => JSX.Element;

// @public (undocumented)
export const EntityLabelsCard: (props: EntityLabelsCardProps) => JSX_2.Element;

// @public (undocumented)
export interface EntityLabelsCardProps {
  // (undocumented)
  title?: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public
export const EntityLayout: {
  (props: EntityLayoutProps): React_2.JSX.Element;
  Route: (props: EntityLayoutRouteProps) => null;
};

// @public (undocumented)
export interface EntityLayoutProps {
  // (undocumented)
  children?: React_2.ReactNode;
  // (undocumented)
  NotFoundComponent?: React_2.ReactNode;
  // Warning: (ae-forgotten-export) The symbol "EntityContextMenuOptions" needs to be exported by the entry point index.d.ts
  //
  // (undocumented)
  UNSTABLE_contextMenuOptions?: EntityContextMenuOptions;
  // Warning: (ae-forgotten-export) The symbol "ExtraContextMenuItem" needs to be exported by the entry point index.d.ts
  //
  // (undocumented)
  UNSTABLE_extraContextMenuItems?: ExtraContextMenuItem[];
}

// @public (undocumented)
export type EntityLayoutRouteProps = {
  path: string;
  title: string;
  children: JSX.Element;
  if?: (entity: Entity) => boolean;
  tabProps?: TabProps<
    React_2.ElementType,
    {
      component?: React_2.ElementType;
    }
  >;
};

// @public (undocumented)
export const EntityLinksCard: (props: EntityLinksCardProps) => JSX_2.Element;

// @public (undocumented)
export interface EntityLinksCardProps {
  // (undocumented)
  cols?: ColumnBreakpoints | number;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public (undocumented)
export type EntityLinksEmptyStateClassKey = 'code';

// @public @deprecated (undocumented)
export const EntityListContainer: (props: {
  children: ReactNode;
}) => JSX_2.Element;

// @public
export function EntityOrphanWarning(): React_2.JSX.Element;

// @public (undocumented)
export interface EntityPredicates {
  // (undocumented)
  kind?: string | string[];
  // (undocumented)
  type?: string | string[];
}

// @public
export function EntityProcessingErrorsPanel(): React_2.JSX.Element | null;

// @public
export function EntityRelationWarning(): React_2.JSX.Element | null;

// @public (undocumented)
export const EntitySwitch: {
  (props: EntitySwitchProps): React_2.JSX.Element;
  Case: (_props: EntitySwitchCaseProps) => null;
};

// @public (undocumented)
export interface EntitySwitchCaseProps {
  // (undocumented)
  children: ReactNode;
  // (undocumented)
  if?: (
    entity: Entity,
    context: {
      apis: ApiHolder;
    },
  ) => boolean | Promise<boolean>;
}

// @public
export interface EntitySwitchProps {
  // (undocumented)
  children: ReactNode;
  // (undocumented)
  renderMultipleMatches?: 'first' | 'all';
}

// @public @deprecated (undocumented)
export const FilterContainer: (props: {
  children: ReactNode;
  options?:
    | {
        drawerBreakpoint?:
          | number
          | 'xs'
          | 'sm'
          | 'md'
          | 'lg'
          | 'xl'
          | undefined;
        drawerAnchor?: 'left' | 'top' | 'bottom' | 'right' | undefined;
      }
    | undefined;
}) => JSX_2.Element;

// @public @deprecated (undocumented)
export const FilteredEntityLayout: (props: {
  children: React.ReactNode;
}) => JSX.Element;

// @public
export function hasCatalogProcessingErrors(
  entity: Entity,
  context: {
    apis: ApiHolder;
  },
): Promise<boolean>;

// @public (undocumented)
export interface HasComponentsCardProps {
  // (undocumented)
  title?: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public
export function hasLabels(entity: Entity): boolean;

// @public
export function hasRelationWarnings(
  entity: Entity,
  context: {
    apis: ApiHolder;
  },
): Promise<boolean>;

// @public (undocumented)
export interface HasResourcesCardProps {
  // (undocumented)
  title?: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public (undocumented)
export interface HasSubcomponentsCardProps {
  // (undocumented)
  tableOptions?: TableOptions;
  // (undocumented)
  title?: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public (undocumented)
export interface HasSystemsCardProps {
  // (undocumented)
  title?: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public
export function isComponentType(
  types: string | string[],
): (entity: Entity) => boolean;

// @public
export function isEntityWith(
  predicate: EntityPredicates,
): (entity: Entity) => boolean;

// @public
export function isKind(kinds: string | string[]): (entity: Entity) => boolean;

// @public
export function isNamespace(
  namespaces: string | string[],
): (entity: Entity) => boolean;

// @public
export function isOrphan(entity: Entity): boolean;

// @public
export function isResourceType(
  types: string | string[],
): (entity: Entity) => boolean;

// @public (undocumented)
export type PluginCatalogComponentsNameToClassKey = {
  PluginCatalogEntityLinksEmptyState: EntityLinksEmptyStateClassKey;
  PluginCatalogSystemDiagramCard: SystemDiagramCardClassKey;
  PluginCatalogEntityContextMenu: EntityContextMenuClassKey;
};

// @public (undocumented)
export const RelatedEntitiesCard: <T extends Entity>(
  props: RelatedEntitiesCardProps<T>,
) => JSX.Element;

// @public (undocumented)
export type RelatedEntitiesCardProps<T extends Entity> = {
  variant?: InfoCardVariants;
  title: string;
  columns: TableColumn<T>[];
  entityKind?: string;
  relationType: string;
  emptyMessage: string;
  emptyHelpLink: string;
  asRenderableEntities: (entities: Entity[]) => T[];
  tableOptions?: TableOptions;
};

// @public (undocumented)
export type SystemDiagramCardClassKey =
  | 'domainNode'
  | 'systemNode'
  | 'componentNode'
  | 'apiNode'
  | 'resourceNode';
```
